
import $app from '../$app';
import $router from '@/router'

export default {
	ws(typeT,data,success,fail) {
		//获取token
		$app.getTokenFun(null,(token, nowTime) => {
			if ("WebSocket" in window) {
				// console.log("您的浏览器支持 WebSocket!");

				//判断websocket对象是否存在
				if($app.wsObj instanceof WebSocket){//已经存在
					let obj = {
						type:typeT,
						token,
						data
					};
					$app.wsObj.send(JSON.stringify(obj));
				}else{
					$app.wsObj = new WebSocket($app.wsUrl);
					$app.wsObj.onopen = () => {
						console.log('建立WebSocket链接')
						// Web Socket 已连接上，使用 send() 方法发送数据
						let obj = {
							type:typeT,
							token,
							data
						};
	
						$app.wsObj.send(JSON.stringify(obj));
	
						// console.log("数据发送中...", JSON.stringify(obj));
					};
	
				}

				
				$app.wsObj.onmessage = e => {

					let res = JSON.parse(e.data);
					// console.log("数据已接收...", res);

					$app.ajaxBackDo('websocket主推',res,success,fail);
					
				};

				$app.wsObj.onclose = () => {
					// 关闭 websocket
					console.log("连接已关闭...");
				};
			} else {
				// 浏览器不支持 WebSocket
				$app.confirm('您的浏览器版本过低，请升级浏览器版本。', '温馨提示', {
					yesText: '升级',
					yesFun: () => {
						window.location = 'https://www.google.cn/chrome';
					}
				});
			}
		});
	},

	ajax({ url, data, success, fail, type }) {
		
		$app.needLoadingTran(url,() => $app.loadingTran());//显示 透明遮罩

		(!!$app.showLoading) && ($app.loading());//用showLoading控制，显示 转转
		//获取 token
		$app.ajaxNeedToken(url, (token, nowTime) => {
			// console.log('当前token = ',token)

			//这个鬼东西已经设置成全局
			$axios({
				method: type,
				url: `${$app.baseUrl}${url}?time=${nowTime}`,
				transformRequest(obj) {
					//把对象转为数组
					let keys = $app.objToArray(1, obj);//取键
					let vals = $app.objToArray(2, obj);//取值

					// Axios 不能直接传对象 需new FormData()
					let axiosData = new FormData();
					keys.forEach((val, i) => {
						if (vals[i] == 'undefined' || vals[i] == undefined || vals[i] == null) {
							//毛都不做
						} else {
							axiosData.append(val, vals[i]);
						}
					});

					return axiosData;
				},
				data: data,

				//这个参数，只有线上环境才认（测试服，正式服），
				//本地电脑node环境，不认！！超时不限制。
				timeout: $app.timeout,//网络超时,

				withCredentials: true,//能否跨域
				headers: {
					//'content-type': 'application/x-www-form-urlencoded',
					'X-FUWUMAO-TOKEN': token,
					'test': 'loveSuper'//自定义头部
				}
			}).then(function (rel) {//请求成功
				$app.initAjaxBase();//初始化ajax timeout
				// console.log('rel = ',rel);
				let res = rel.data;

				if (rel.status == 200) {
					$app.ajaxBackDo(url,res,success,fail);
				} else {
					$app.ajaxError(res, url);
				}

			}).catch(function (res) {//请求失败
				$app.ajaxError(res, url);
			});
		});


	},

	ajaxBackDo(url,res,success,fail){
		let code = res[$app.xhrCode];

		if(!$app.judgeData(res[$app.xhrMsg])){
			res.msg='msg为空，请联系后端工程师';
		}

		//1成功 , 非1，全部抛出msg
		if (code == $app.xhrJudge) {
			$app.ajaxSuccess(res, success);
		} else if (code == 401) {//token失效，跳转登录
			$app.toast(res.msg, false, () => {
				$app.goLogin(true);
			}, 1000);

		} else {
			$app.ajaxFail(url, res, fail);
		}
	},

	//判断那些接口需要 token（仅少部分不用，比如：注册）
	ajaxNeedToken(url, callBack) {
		let judge = true;
		($app.noToken).forEach((val, i) => {
			(url == val) && (judge = false);
		});

		if (judge) {
			$app.getTokenFun(null,callBack);
		} else {
			let nowTime = new Date().getTime();//获取现在的时间
			callBack('', nowTime);
		}
	},



	//ajax成功回调 通过后台code判断状态
	ajaxSuccess(res, callBack) {
		callBack(res);
	},

	//ajax请求成功，状态失败
	ajaxFail(url, res, callBack) {
		//输入框错误，聚焦
		if (res[$app.xhrCode] == 500) {//哪些接口 code==500 需要聚焦的input框
			$app.code500needFocus(url, () => {// 满足，$Message+需聚焦
				callBack instanceof Function && callBack(res);
			}, () => {//不满足，仅alert
				$app.ajaxFailFinal(res, callBack);
			})
		} else if (res[$app.xhrCode] == 505) {//未企业认证
			$app.confirm(res[$app.xhrMsg], '提 示', {
				yesText: '立即认证',
				yesFun: () => {
					//强制性跳转企业认证
					$app.companyYes('',callBack);
				}
			});
		} else if (res[$app.xhrCode] == 506) {// 没钱，并且没有首次充值
			$app.confirm(res[$app.xhrMsg], '提 示', {
				yesText: '充值',
				yesFun: () => {
					//强制性跳转充值
					$app.rechargeYes(callBack);
				}
			});
		} else if (res[$app.xhrCode] == 507) {//增值服务，当天用完了
			$app.confirm(res[$app.xhrMsg], '提 示', {
				yesText: '充值',
				yesFun: () => {
					let service_type = res.data.service_type;
					// 增值服务，当天用完，强制性跳去充值页面
					$app.todayMoneyYes(service_type, callBack);
				},
				noFun: () => {
					$app.closeTag($router.history.current);//关闭现在的页面
				}
			});
		} else if (res[$app.xhrCode] == 508) {//订单不存在
			$app.alert(res[$app.xhrMsg], '提 示',()=>{
				$app.closeTag($router.history.current);//关闭现在的页面
			});
		} else {
			$app.ajaxFailFinal(res, callBack);
		}

	},
	//错误提示最终处理
	ajaxFailFinal(res, callBack) {
		$app.alert(res[$app.xhrMsg], '提 示', function () {
			callBack instanceof Function && callBack(res);
		});
	},

	//错误处理
	ajaxError(res, url) {
		$app.initAjaxBase(() => {
			if (res.XHRcode) {
				console.log('XHRcode = ', res.XHRcode)

				if(res.XHRcode == 9999){
					$app.networkTimeout();//网络超时
				}else{
					$app.confirm((res + '<br/>API: ' + url), ('XHR错误码: ' + res.XHRcode), {
						yesFun: () => {
							$router.replace({ name: 'home' });
						},
						yesText: '返回首页',
						noText: '留在当前'
					});
				}

			} else {
				console.log('拦截 = ', res)
			}
		});//初始化ajax timeout
	},

	//初始化ajax timeout
	initAjaxBase(callBack) {
		setTimeout(function () {//延迟体验更优秀
			$app.loading('hide');
		}, 200);
		$app.timeout = 20000;
		$app.showLoading = true;
		callBack instanceof Function && callBack();
	},

	//post请求
	postAjax(url, data, success, fail) {
		$app.ajax({
			url, data, success, fail,
			type: 'POST'
		});
	},

	//浏览器层级，打开新窗口
	openWindow(url) {
		let string = $app.toLower(url); //取文件后后缀名
		
		if (/(pdf)$/i.test(string)) {//满足pdf格式
			// 浏览器兼容处理 = 非IE浏览器
			if((window.navigator.userAgent).indexOf('MSIE') == -1){
				window.open(url, "_blank");



				//条件满足，可以在线预览pdf
				// 正式，线上环境
				// if (process.env.NODE_ENV === 'production') {
				// 	// 必须要同域
				// 	if(url.indexOf('\/\/www\.')>-1){
				// 		let aaT=(window.location.origin);
				// 		let ccT=aaT.replace('http\:\/\/','https\:\/\/');
				// 		let ddT=ccT.replace('\/\/fuwumao','\/\/www\.fuwumao');
				// 		let eeT=ddT.replace('\/\/lv\.fuwumao','\/\/www\.fuwumao');
				// 		console.log('当前 = 域名 = ',eeT)
				// 		window.open(eeT+'/pdf_see/?file_url='+JSON.stringify(url), "_blank");
				// 	}else{//跨越直接下载
				// 		window.open(url, "_blank");
				// 	}
				// }else{
				// 	window.open(url, "_blank");
				// }
				
			}else{
				if((window.navigator.userAgent).indexOf('MSIE') > -1){//IE浏览器特殊处理 - IE10以下都会弹出，IE11不会
					$app.confirm("预览PDF可能会导致当前页面关闭，请确保填写内容已保存。", "您正在使用IE浏览器", {
						yesFun: () => {
							window.open(url, "_blank");
						}
					});
				}else{
					window.open(url, "_blank");
				}
			}
		} else {
			window.open(url, "_blank");
		}
	},
	/****
	 * 文件下载
	 * 只能适合服务猫系统，官文通知书文件
	 ***/ 
	fileNameAgainDown(url,orderInfo,orLiInfo){
		$app.fileNameAgainDown_base(1,url,orderInfo,orLiInfo);
	},
	//配合上者使用 1直接下载不重命名，2重命名后再下载
	fileNameAgainDown_base(whoT,url,orderInfo,orLiInfo){
		if(whoT==1){
			//orderInfo,orLiInfo 无需用到
			$app.openWindow(url)
		}else{

			// 前面的重命名的名称
			let againName='';
			let guiZ=null;
			if($app.judgeData(orLiInfo) && $app.judgeData(orLiInfo.goods_type) ){
				guiZ=(orLiInfo.goods_type).toString().slice(0,1);
			}

			if(guiZ!=null){//1专利，2商标，3版权
				if(guiZ==1){
					if($app.judgeData(orderInfo.name)){
						againName+=orderInfo.name+'-';
					}
			
					if($app.judgeData(orderInfo.patent_number)){
						againName+=orderInfo.patent_number+'-';
					}

				}else if(guiZ==2){

					// 商标类型，为文字
					if(orderInfo.type==1){
						if($app.judgeData(orderInfo.name)){
							againName+=orderInfo.name+'-';
						}
					//非文件类型
					}else{
						againName+='商标注册-';
					}

			
					if($app.judgeData(orderInfo.apply_number)){
						againName+=orderInfo.apply_number+'-';
					}
					
				}else if(guiZ==3){
					console.log('版权官文下载，重命名，还没做')
				}
			}


					
			var urlK=url;
			
			var xu1=url.lastIndexOf('\/')+1;
			var xu2=url.lastIndexOf('\.');
			var fileName=url.slice(xu1,xu2);
			var houZ='.'+$app.toLower(url);
			console.log('终极文件名 = ',againName+fileName+houZ)
			
			
			var link = document.createElement('a');
			link.style.display = 'none';
			link.href = urlK;
			link.setAttribute(
			'download',
			againName+fileName+houZ
			)
			document.body.appendChild(link)
			link.click();
			
			
			//延迟体验更优秀
			setTimeout(function(){
				document.body.removeChild(link);
			},100);
			
		}
	}
}; 